import handleNum from "./index";
// 管理数据
// const defaultState = {
//   // num: 20,
//   // num: Numstatus.state.num  // 数据一多要写很多次
//   ...handleNum.state   // 解构的写法
// };

let reducer = (
  state = { ...handleNum.state }, // 直接解构
  action: { type: string; value: number }
) => {
  // 调用dispatch就会执行这里的代码
  // console.log("初始化执行了reducer....");
  // 深度复制
  let newState = JSON.parse(JSON.stringify(state));

  // switch的做法是拿action.type和case后面的每一个值进行对比，进行遍历
  // 把case后面的值做成对象，actionsNames
  // 1 原始写法
  // switch (action.type) {
  //   case handleNum.add1:
  //     handleNum.actions[handleNum.add1](newState,action)
  //     break;
  //   case handleNum.add2:
  //     handleNum.actions[handleNum.add2](newState,action)
  //     break;
  //   default:
  //     break;
  // }
  // 2 [优化]，上面的写法，我们在每添加一个方法，都要多写一个case
  // 拿action.type和actionsNames每一个项进行对比，如果相等，就调用
  // 模块名 actions[下标](newState,action)

  for (let key in handleNum.actionNames) {
    // key 是每一个键
    // 判断是否相等
    // if (action.type === "add1") {
    if (action.type === handleNum.actionNames[key]) {
      handleNum.actions[handleNum.actionNames[key]](newState, action);
      break;
    }
  }
  // 好处：每一次写一个方法，都不需要手动添加case
  return newState;
};

export default reducer;
